"""
日志配置
使用 loguru 实现日志功能
"""
import os
import sys
import logging
from loguru import logger
from config.settings import settings


def setup_logger():
    """配置日志系统"""

    # 移除默认的日志处理器
    logger.remove()
    
    # 禁用SQLAlchemy的详细日志
    logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING)
    logging.getLogger('sqlalchemy.pool').setLevel(logging.WARNING)

    # 控制台输出
    logger.add(
        sys.stdout,
        level=settings.log_level,
        format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
               "<level>{level: <8}</level> | "
               "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
               "<level>{message}</level>",
        colorize=True,
    )

    # 确保日志目录存在
    os.makedirs(settings.log_path, exist_ok=True)

    # 文件输出 - 所有日志
    logger.add(
        os.path.join(settings.log_path, "app_{time:YYYY-MM-DD}.log"),
        level="DEBUG",
        format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} | {message}",
        rotation="00:00",  # 每天午夜轮转
        retention="30 days",  # 保留30天
        compression="zip",  # 压缩旧日志
        encoding="utf-8",
    )

    # 文件输出 - 错误日志
    logger.add(
        os.path.join(settings.log_path, "error_{time:YYYY-MM-DD}.log"),
        level="ERROR",
        format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} | {message}",
        rotation="00:00",
        retention="90 days",  # 错误日志保留更长时间
        compression="zip",
        encoding="utf-8",
        backtrace=True,  # 显示完整堆栈
        diagnose=True,   # 显示变量值
    )

    logger.info("日志系统初始化完成")
    return logger


# 全局logger实例
app_logger = setup_logger()
